package point;

/**
 * 题目：左旋转字符串
 * "abcXYZdef",3 ->"XYZdefabc"
 * 解题思路：
 * 先反转前面几个，再翻转后面几个，最后全部重写翻转
 * @Author Gavin
 * @date 2022.08.06 17:29
 */
public class spinStr {
    /**
     * 思路：
     * 1.先翻转前半部分
     * 2.再翻转后半部分
     * 3.再对字符串整个进行翻转
     * <p>
     * 考点：不使用库对字符串进行灵活的翻转
     */
    public String LeftRotateString(String str, int n) {
        if (str == null || str.length() == 0 || n <= 0) {
            return str;
        }
        if (n >= str.length()) {//这儿也是比较关键的
            n = n % str.length();
        }
        char[] ch = str.toCharArray();
        reverseString(ch, 0, n - 1);
        reverseString(ch, n, str.length() - 1);
        reverseString(ch, 0, str.length() - 1);
        return new String(ch);
    }

    /**
     * 对字符数组 ch 的 start 到 end 范围内的字符进行翻转
     */
    public void reverseString(char[] ch, int start, int end) {
        while (start < end) {
            char temp = ch[start];
            ch[start] = ch[end];
            ch[end] = temp;
            start++;
            end--;
        }
    }
}
